Manage XML Schema File ( add element - Attribute)






2.77/5 (5 votes)
Aug 8, 2007

36361

265
How to manage XML Schema file add element and attribute in asp.net
Introduction
in that Article i will manage XML Schema File by selecting all the schema file elements and
display them in DropDownList , Adding Elements to root element and select elemet to add an
attributes to the selected element
Background
First you must know some information abut xml and xmls schema .
Using the code
public void load_element()that funcation load the element and display them in
DropDownList
public void load_element()
{
DropDownList_elements.Items.Clear();
XmlTextReader reader = new XmlTextReader(Server.MapPath("person.xsd"));
// declare new xmlschema variable
XmlSchema my_xmlschema = new XmlSchema();
// read xsd file
my_xmlschema = XmlSchema.Read(reader, null);
reader.Close();
// declare new xmlschema Element
XmlSchemaElement my_xmlschemaelement = new XmlSchemaElement();
// count how many item in XmlSchema
int counter = my_xmlschema.Items.Count;
// select the root Element in the xsd file in that case "person"
// so we loop in all element till we get "person" element
for (int i = 0; i < counter; i++)
{
XmlSchemaElement current_element = (XmlSchemaElement)my_xmlschema.Items[i];
// if the current elemet is the root element "person"
if (current_element.Name.ToString() == "person")
{
// go in complextype
XmlSchemaComplexType current_element_complexType = (XmlSchemaComplexType)current_element.SchemaType;
// go in Sequence
XmlSchemaSequence current_elemen_sequence = (XmlSchemaSequence)current_element_complexType.Particle;
// loop in Sequence
foreach ( XmlSchemaObject my_XmlSchemaObject in current_elemen_sequence.Items)
{
XmlSchemaElement my_XmlElement = (XmlSchemaElement)my_XmlSchemaObject;
// get the element type name
string[] TypeName = my_XmlElement.SchemaTypeName.ToString().Split(':');
// add the element name and type to DropDownList
DropDownList_elements.Items.Add(my_XmlElement.Name.ToString() + " " + "-" + " " + TypeName[2]);
}
}
}
DropDownList_elements.DataBind();
}
Button_add_element : that button get the element name from TextBox and type from
drodownlist and add it in root element then call the void load_element() funcation to load the
element aftar adding the new element .
protected void Button_add_element_Click(object sender, EventArgs e)
{
XmlTextReader reader = new XmlTextReader(Server.MapPath("person.xsd"));
// declare new xmlschema variable
XmlSchema my_xmlschema = new XmlSchema();
// read xsd file
my_xmlschema = XmlSchema.Read(reader, null);
reader.Close();
// declare new xmlschema Element
XmlSchemaElement my_xmlschemaelement = new XmlSchemaElement();
// count how many item in XmlSchema
int counter = my_xmlschema.Items.Count;
// select the root Element in the xsd file in that case "person"
// so we loop in all element till we get "person" element
for (int i = 0; i < counter; i++)
{
// save the current element in new xml variable
XmlSchemaElement current_element = (XmlSchemaElement)my_xmlschema.Items[i];
// if the current elemet is the root element "person"
if (current_element.Name.ToString() == "person")
{
// go in complextype
XmlSchemaComplexType current_element_complexType = (XmlSchemaComplexType)current_element.SchemaType;
// go in Sequence
XmlSchemaSequence current_elemen_sequence = (XmlSchemaSequence)current_element_complexType.Particle;
// create new element
XmlSchemaElement new_element = new XmlSchemaElement();
// set the nme of the new element
new_element.Name = TextBox_element_name.Text;
// set the type of the new element
new_element.SchemaTypeName = new XmlQualifiedName(DropDownList_type.SelectedValue.ToString(), "http://www.w3.org/2001/XMLSchema);">http://www.w3.org/2001/XMLSchema);
// add the new element to our current elemen sequence
XmlSchemaObject new_element_object = (XmlSchemaObject)new_element;
current_elemen_sequence.Items.Add(new_element_object);
}
}
// careat file stream
FileStream writer = new FileStream(Server.MapPath("person.xsd"), System.IO.FileMode.Create);
// wrire the new schema
my_xmlschema.Write(writer);
// close the file stream
writer.Close();
// load the xsd file after adding new element
load_element();
}
Button_add_attribute : that button get element name from textbox and type from
drodownlist and add the attribute to the selected element and cheak if the selected element dont have attribute creat new complex type and add the attribute in and if the element have
an attribut add the element in the current complex type.
protected void Button_add_attribute_Click(object sender, EventArgs e)
{
XmlTextReader reader = new XmlTextReader(Server.MapPath("person.xsd"));
// declare new xmlschema variable
XmlSchema my_xmlschema = new XmlSchema();
// read xsd file
my_xmlschema = XmlSchema.Read(reader, null);
reader.Close();
// declare new xmlschema Element
XmlSchemaElement my_xmlschemaelement = new XmlSchemaElement();
// count how many item in XmlSchema
int counter = my_xmlschema.Items.Count;
// select the root Element in the xsd file in that case "person"
// so we loop in all element till we get "person" element
for (int i = 0; i < counter; i++)
{
// save the current element in new xml variable
XmlSchemaElement current_element = (XmlSchemaElement)my_xmlschema.Items[i];
// if the current elemet is the root element "person"
if (current_element.Name.ToString() == "person")
{
// go in complextype
XmlSchemaComplexType current_element_complexType = (XmlSchemaComplexType)current_element.SchemaType;
// go in Sequence
XmlSchemaSequence current_elemen_sequence = (XmlSchemaSequence)current_element_complexType.Particle;
// loop in root element "person" sequence items
foreach (XmlSchemaObject my_XmlSchemaObject in current_elemen_sequence.Items)
{
// convert the XmlSchemaObject to XmlSchemaElement
// so we can access the element properties like name
XmlSchemaElement my_XmlElement = (XmlSchemaElement)my_XmlSchemaObject;
string[] ElementName = DropDownList_elements.SelectedValue.ToString().Split(' ');
// use if condition to get in the selected element
if (my_XmlElement.Name.ToString() == ElementName[0])
{
// is thar any complex type oready in the selected element
if (my_XmlElement.SchemaType == null )
{
// create new XmlSchemaComplexType
XmlSchemaComplexType new_XmlSchemaComplexType = new XmlSchemaComplexType();
// ctreat new Attribute
XmlSchemaAttribute new_XmlSchemaAttribute = new XmlSchemaAttribute();
// set the new Attribute name
new_XmlSchemaAttribute.Name = TextBox_Attribute.Text;
// set the new Attribute type
new_XmlSchemaAttribute.SchemaTypeName = new XmlQualifiedName(DropDownList_Attribute.SelectedValue.ToString(), "http://www.w3.org/2001/XMLSchema);">http://www.w3.org/2001/XMLSchema);
// convert new_XmlSchemaAttribute variable to XmlSchemaObject so we can add the Attribute
// to the new complex type
XmlSchemaObject new_XmlSchemaAttribute_object = (XmlSchemaObject)new_XmlSchemaAttribute;
// add the new Attribute to the new complex type
new_XmlSchemaComplexType.Attributes.Add(new_XmlSchemaAttribute_object);
// add the new ComplexType to the selected element
my_XmlElement.SchemaType = new_XmlSchemaComplexType;
}
else
{
// go in selected element complextype
XmlSchemaComplexType select_elemet_XmlSchemaComplexType = (XmlSchemaComplexType)my_XmlElement.SchemaType;
// ctreat new Attribute
XmlSchemaAttribute new_XmlSchemaAttribute = new XmlSchemaAttribute();
// set the new Attribute name
new_XmlSchemaAttribute.Name = TextBox_Attribute.Text;
// set the new Attribute type
new_XmlSchemaAttribute.SchemaTypeName = new XmlQualifiedName(DropDownList_Attribute.SelectedValue.ToString(), "http://www.w3.org/2001/XMLSchema);">http://www.w3.org/2001/XMLSchema);
// convert new_XmlSchemaAttribute variable to XmlSchemaObject so we can add the Attribute
// to the new complex type
XmlSchemaObject new_XmlSchemaAttribute_object = (XmlSchemaObject)new_XmlSchemaAttribute;
// add the new Attribute to the selected element complex type
select_elemet_XmlSchemaComplexType.Attributes.Add(new_XmlSchemaAttribute_object);
}
}
}
}
}
// careat file stream
FileStream writer = new FileStream(Server.MapPath("person.xsd"), System.IO.FileMode.Create);
// wrire the new schema
my_xmlschema.Write(writer);
// close the file stream
writer.Close();
}
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
load_element();
}
}
Points of Interest
main idea of controling and manageing XML Schema Elements.